package com.hhd.day03

fun main(args: Array<String>) {
    /**
     * java获取类的方法（3种）
     */
//    Test.this.name

//    //第一种
//    Class.forName("")
//    //第二种
//    Test.class
//    //第三种
//    new Test().getClass()


    val box1 = Box("")
    val box2 = Box(10)
    //class类型（类型擦除）
    val clz1 = box1.javaClass.name
    val clz2 = box2.javaClass.name
//    println("box1类型= " + clz1 + "；box2类型= " + clz2)

//    String::class.java//相当于Test.class(第二种)
    parseType(10L)
}

/**
 * 解析并获取泛型的类型。
 *
 * 解决泛型被擦除的方案：
 * 1.泛型前加reified，
 * 2.方法前加上inline关键字。
 */
inline fun <reified T> parseType(thing: T) {
    val type = T::class.java.name
    println("通过reified获取泛型的类型= " + type)
}
